import service from "@/utils/request";
import type { IBaseTrademark } from "@/api/trademark";

export interface IBaseSaleAttr {
  // 基础销售属性的id
  id: number;
  // 基础销售属性的名称
  name: string;
}

export interface IAttrValue {
  //平台属性值所属的属性ID
  attrId: number;
  //平台属性值的ID
  id: number;
  //平台属性值的名称
  valueName: string;
}
export interface IAttr {
  //平台属性的Id
  id: number;
  //平台属性的名称
  attrName: string;
  //平台属性所属分类Id
  categoryId: number;
  //平台属性所属分类等级
  categoryLevel: number;
  //平台属性值的集合
  attrValueList: IAttrValue[];
}

//如果要使用 类型方法去生成一个新的类型 那么就不能使用interface 要使用type
export type IAddOrEditAttr = Partial<Omit<IAttr, "attrValueList">> & {
  attrValueList?: Partial<IAttrValue>[];
};

/**
 * 自己编写类型函数
 * MyPartial 函数名称
 * <T> 就是参数
 * = 后面就是逻辑，也是返回的结果
 */

// type P = Omit<IAttr, "attrValueList">;
// type P1 = keyof P;

// type MyPartial<T, K extends keyof T> = {
//   // keyof T => keyof 作用有点像 Object.keys(T) => 'id'|'attrName'|'categoryId'|'categoryLevel'|'attrValueList'
//   // in 遍历，类似 for in
//   // 'id'|'attrName'|'categoryId'|'categoryLevel'|'attrValueList' => 'id'|'attrName'|'categoryId'|'categoryLevel'
//   [P in keyof Omit<T, K>]?: T[P];
// };

// type IAddOrEditAttr2 = MyPartial<IAttr, "attrValueList" | "id">;

//获取平台属性列表
export function requestAttrInfoList(
  category1Id: number,
  category2Id: number,
  category3Id: number
) {
  return service.get<any, IAttr[]>(
    `/product/attrInfoList/${category1Id}/${category2Id}/${category3Id}`
  );
}

//添加||编辑
export function requestSaveOrUpdateAttr(data: IAddOrEditAttr) {
  return service.post<any, null>("/product/saveAttrInfo", data);
}

//删除attr
export function requestDeleteAttr(id: number) {
  return service.delete<any, null>(`/product/deleteAttr/${id}`);
}

//获取基础销售属性列表
export function requestBaseSaleAttrList() {
  return service.get<any, IBaseSaleAttr[]>(`/product/baseSaleAttrList`);
}
